查看原文
其他

精通Linux系列六:查看文件内容(看完再也不用担心打开四十个G的文本文件服务器卡死了)

拾叁 更AI 2023-10-21

点击关注公众号,AI&编程干货及时送达   

命令含义
cat完整查看文件。
less一页一页地查看文本文件。
nl带有行号的查看文本文件。
head查看文本文件的开头几行。
tail查看文本文件的末尾几行。
strings显示嵌入在二进制文件中的文本。
od以八进制(或其他格式)查看数据。

在Linux中,你会遇到包含可读文本的文件,也会遇到包含你想以可读方式查看的二进制数据的文件。在这里,我们将演示如何在最基本层面上显示它们的内容。

cat

stdin  stdout  - 文件  -- 选项  --help  --version

cat [选项] [文件]

最简单的查看器是cat,它只是将其文件打印到标准输出,然后连接它们(因此得名):

 cat 我的文件

大文件可能会滚动到屏幕外,所以如果你打算阅读输出,你可能需要考虑使用less。话虽如此,cat在将一组文件发送到shell管道中时特别有用:

 cat 我的文件* | wc

cat还可以以小方式处理其输出,可以选择显示非打印字符,预置行号(尽管nl命令在此目的上更强大),并消除空白。

有用的选项

-T以^I的形式打印标签。
-E以$的形式打印新行。
-v以人类可读的格式打印其他非打印字符。
-n在每一行前预置行号。
-b在非空白行前预置行号。
-s将每个空白行序列压缩成一个单独的空白行。

less

stdin  stdout[9]  - 文件  -- 选项  --help  --version

less [选项] [文件]

使用less一次查看一个“页面”的文本(即,一次窗口或屏幕的文本):

 less 我的文件

它非常适合文本文件,或者作为带有长输出的shell管道中的最后一个命令:

 命令1 | 命令2 | 命令3 | 命令4 | less

在运行less时,键入h以获取描述所有功能的帮助消息。这里有一些在文件中翻页的有用按键:

按键意义
h, H查看帮助页面。
空格键,f^V^F向前移动一个屏幕。
Enter向前移动一行。
b^B,ESC-v向后移动一个屏幕。
/进入搜索模式。后面跟着一个正则表达式然后按回车,less会查找第一个匹配行。
?和/一样,但它在文件中向后搜索。
n下一个匹配:重复你最近的向前搜索。
N重复你最近的向后搜索。
v用你的默认文本编辑器编辑当前文件(环境变量VISUAL的值,如果未定义,则为EDITOR,如果未定义,则为程序vi)。
<, g跳转到文件开头。
>, G跳转到文件末尾。
:n跳转到下一个文件。
:p跳转到上一个文件。

'less'有令人眼花缭乱的许多功能;我们只介绍最常见的。(例如,'less'会显示压缩Zip文件的内容:试试'less myfile.zip'。)强烈建议阅读手册页。

常用选项

-c在显示下一页之前清除屏幕。这可以避免滚动,可能对眼睛更舒服。
-m打印更详细的提示,显示到目前为止已显示的文件的百分比。
-N显示行号。
-r直接显示控制字符;通常'less'会将它们转换为易于人类阅读的格式。
-s将多个相邻的空行压缩成一个空行。
-S将长行截断为屏幕的宽度,而不是换行。

nl

stdin  stdout  - 文件  -- 选项  --帮助  --版本

nl [选项] [文件] 

'nl'将其文件复制到标准输出,前面带有行号:

 nl poem
     1  从前,有一次,
     2  有一个小操作系统,
     3  名叫Linux,大家都喜欢它。

它比'cat'的'-n'和'-b'选项更灵活,提供了对编号的更大控制。

常用选项

-b [a、t、n、p R ]在所有行(a),非空行(t),没有行(n)或只有包含正则表达式*R*的行前添加编号。(默认=a)
-v N从整数*N*开始编号。 (默认=1)
-i N每行编号增加*N *,所以例如,你可以只用奇数(-i2)或偶数(-v2 -i2)。 (默认=1)
`-n [lnrn
-w N强制数字的宽度为*N*列。 (默认=6)
-s S在行号和文本之间插入字符串*S*。 (默认=Tab)

head

stdin  stdout  - 文件  -- 选项  --帮助  --版本

head [选项] [文件]

'head'命令打印出文件的前10行,这对于预览内容非常好:

 head myfile
 head myfile* | less   预览多个文件

它也适合预览管道输出的前几行--比如说,当前目录中最近修改的10个文件:

 ls -lta | head

常用选项

-n N打印前*N *行,而不是10行。
-N和 -n *N*相同。
-c N打印文件的前*N *字节。
-q安静模式:处理多个文件时,不在每个文件上打印横幅。通常,'head'会打印包含文件名的横幅。

tail

stdin  stdout  - 文件  -- 选项  --帮助  --版本

tail [选项] [文件]

'tail'命令打印出文件的最后10行,还有其他技巧:

 tail myfile
 nl myfile | tail  也可以看到行号

超级有用的'-f'选项让'tail'在另一个程序写入文件时主动监视一个文件,显示写入的新行。这对于监视正在使用的Linux日志文件非常宝贵,因为其他程序会写入它:

 tail -/var/log/syslog

常用选项

-n N打印文件的最后*N*行,而不是10行。
-N和 -n *N*相同。
-n +N打印除了前*N*行之外的所有行。
-c N打印文件的最后*N *字节。
-f保持文件打开,当行被追加到文件时,打印它们。这非常有用。如果文件还不存在,但你想等待它存在,那就添加 --retry 选项。
-q静默模式:当处理多个文件时,不在每个文件上方打印横幅。通常,tail(尾部) 会打印包含文件名的横幅。

strings

stdin  stdout  - file  -- opt  --help  --version

strings [options] [files]

二进制文件,如可执行程序和对象文件,通常包含一些可读的文本。strings(字符串) 程序提取这些文本并在标准输出上显示。你可以用 strings(字符串) 发现版本信息,作者姓名,和其他有用的小信息:

 strings /usr/bin/who
David MacKenzie
Copyright %%Free Software Foundation, Inc.
Report %s bugs to %s
...

结合 strings(字符串) 和 grep(全局搜索) 使你的探索更加有效。这里我们寻找电子邮件地址:

 strings -10 /usr/bin/who | grep '@'
bug-coreutils@gnu.org

有用的选项

-n *length* | 只显示长度大于 length 的字符串(默认为4)。 |

od

stdin  stdout  - file  -- opt  --help  --version

od [options] [files]

当你想查看一个二进制文件时,可以考虑使用 od(八进制转储) 进行工作。它将一个或多个文件复制到标准输出,以 ASCII,八进制,十进制,十六进制,或浮点数,以及各种大小(字节,短,长)显示他们的数据。例如,此命令:

 od -w8 /usr/bin/who
0000000 042577 043114 000401 000001
0000010 000000 000000 000000 000000
0000020 000002 000003 000001 000000
...

以八进制显示二进制文件 /usr/bin/who 中的字节,每行八个字节。左边的列包含每行的文件偏移量,也是以八进制表示。

如果你的二进制文件也包含文本,考虑使用 -tc 选项,它会显示字符数据。例如,像 who(谁) 这样的二进制可执行文件在开头包含字符串 "ELF":

 od -tc -w8 /usr/bin/who | head -3
0000000 177   E   L   F 001 001 001  \0
0000010  \0  \0  \0  \0  \0  \0  \0  \0
0000020 002  \0 003  \0 001  \0  \0  \0

有用的选项

-N B只显示每个文件的前 B 个字节,可用十进制,十六进制(在前面加上 0x 或 0X),512 字节块(在后面加上 b),千字节(在后面加上 k),或兆字节(在后面加上 m)进行指定。(默认显示整个文件)
-j B从每个文件的字节 B +1 开始输出;可接受的格式与 -N 选项相同。(默认=0)
-w [ B ]每行显示 B 个字节;可接受的格式与 -N 选项相同。单独使用 -w 等价于 -w32。(默认=16)
-s [ B ]将每行字节组成 B 字节的序列,用空格隔开;可接受的格式与 -N 选项相同。单独使用 -s 等价于 -s3。(默认=2)
`-A (do
`-t(ac)[z]`
`-t(do

在 -t 选项后附加 z 会在输出的右边打印一个新的列,显示每行上的可打印字符。

··································

你好,我是拾叁,7年开发老司机、互联网两年外企5年。怼得过阿三老美,也被PR comments搞崩溃过。这些年我打过工,创过业,接过私活,也混过upwork。赚过钱也亏过钱。一路过来,给我最深的感受就是不管学什么,一定要不断学习。只要你能坚持下来,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯和编程知识,帮你积累弯道超车的资本。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存